package com.hsjk.szwj.module.pay.dal.dataobject.config;

import com.hsjk.szwj.module.pay.dal.dataobject.system.MchAppDO;
import com.hsjk.szwj.module.pay.dal.dataobject.system.MchInfoDO;
import com.hsjk.szwj.module.pay.enums.MchTypeEnum;
import lombok.Data;

import java.util.HashMap;
import java.util.Map;

/**
 * @author chenjiawei
 * @desc 商户应用支付参数信息 放置到内存， 避免多次查询操作
 * @Date 2023/08/20 22:24
 **/
@Data
public class MchAppConfigContext {

    /**
     * 商户信息缓存
     */
    private Long mchId;
    private Long appId;
    private Integer mchType;
    private MchInfoDO mchInfo;
    private MchAppDO mchApp;
    private Long ifCodeId;

    /**
     * 商户支付配置信息缓存,  <接口代码, 支付参数>
     */
    private Map<Long, NormalMchParams> normalMchParamsMap = new HashMap<>();
    private Map<Long, IsvsubMchParams> isvsubMchParamsMap = new HashMap<>();

    /**
     * 放置所属服务商的信息
     **/
    private IsvConfigContext isvConfigContext;

    /**
     * 缓存 wxServiceWrapper 对象
     **/
    private WxServiceWrapper wxServiceWrapper;

    /**
     * 获取普通商户配置信息
     **/
    public NormalMchParams getNormalMchParamsByIfId(Long ifId) {
        return normalMchParamsMap.get(ifId);
    }

    /**
     * 获取isv配置信息
     **/
    public <T> T getNormalMchParamsByIfId(Long ifId, Class<? extends NormalMchParams> cls) {
        return (T) normalMchParamsMap.get(ifId);
    }

    /**
     * 获取特约商户配置信息
     **/
    public IsvsubMchParams getIsvsubMchParamsByIfId(Long ifId) {
        return isvsubMchParamsMap.get(ifId);
    }

    /**
     * 获取isv配置信息
     **/
    public <T> T getIsvsubMchParamsByIfId(Long ifId, Class<? extends IsvsubMchParams> cls) {
        return (T) isvsubMchParamsMap.get(ifId);
    }

    /**
     * 是否为 服务商特约商户
     **/
    public boolean isIsvsubMch() {
        return this.mchType.equals(MchTypeEnum.ISVSUB.getValue());
    }


    public WxServiceWrapper getWxServiceWrapper() {
        return isIsvsubMch() ? isvConfigContext.getWxServiceWrapper() : wxServiceWrapper;
    }
}
